﻿//using System;
//using System.Collections;
//using System.Collections.Generic;
//using System.Diagnostics;
//using System.Linq;
//using AzureContrib.WindowsAzure.Diagnostics;

//namespace AzureContrib.WindowsAzure.Tests.Utils
//{
//  public class TraceMock : IEnumerable<TraceMessage>, ITrace
//  {
//    private IList<TraceMessage> traceMessages;

//    public TraceMock()
//    {
//      traceMessages = new List<TraceMessage>();
//    }

//    public IEnumerator<TraceMessage> GetEnumerator()
//    {
//      return traceMessages.GetEnumerator();
//    }

//    IEnumerator IEnumerable.GetEnumerator()
//    {
//      return GetEnumerator();
//    }

//    ///// <summary>
//    ///// Verify that a <see name="TraceMock"/> has been loging a speciffic message.
//    ///// This is standard debug behavior in Windows Azure.
//    ///// </summary>
//    ///// <param name="message">The message written</param>
//    ///// <param name="searchType">Does the message match the whole loged message or is it the start of the message logged</param>
//    ///// <param name="eventLogName">The name of the event category used</param>
//    ///// <param name="cardinality">How many times is the message expected to be loged</param>
//    ///// <param name="messageArgs">Message arguments to format into the message</param>
//    ///// <returns>True if the <see name="TraceMock"/> has loged the message</returns>
//    //public void VerifyTrace(EventLogName eventLogName,
//    //                        Cardinality cardinality,
//    //                        SearchType searchType,
//    //                        string message,
//    //                        params object[] messageArgs)
//    //{
//    //  if (DoVerifyTrace(eventLogName, cardinality, searchType, message, messageArgs))
//    //    return;

//    //  DumpAllTrace();
//    //  if (messageArgs != null)
//    //    message = message.DoFormat(messageArgs);

//    //  traceMessages.ForEach(tm => Debug.WriteLine(tm));

//    //  Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail(string.Format("Expected the loged data to have loged '{0}'", message));
//    //}

//    //public void VerifyNoTrace(EventLogName eventLogName,
//    //                          Cardinality cardinality,
//    //                          SearchType searchType,
//    //                          string message,
//    //                          params object[] messageArgs)
//    //{
//    //  if (DoVerifyTrace(eventLogName, cardinality, searchType, message, messageArgs))
//    //  {
//    //    DumpAllTrace();
//    //    Microsoft.VisualStudio.TestTools.UnitTesting.Assert.Fail(string.Format("Expected not to have loged '{0}'", message));
//    //  }
//    //}

//    //private bool DoVerifyTrace(EventLogName eventLogName,
//    //                           Cardinality cardinality,
//    //                           SearchType searchType,
//    //                           string message,
//    //                           params object[] messageArgs)
//    //{
//    //  if (messageArgs.Length > 0)
//    //  {
//    //    message = string.Format(message, messageArgs);
//    //  }

//    //  Func<TraceMessage, bool> messageMatch;
//    //  if (searchType == SearchType.StartsWith)
//    //  {
//    //    messageMatch = tm => tm.Category == eventLogName && tm.Message.StartsWith(message);
//    //  }
//    //  else //searchType = SearchType.Equals
//    //  {
//    //    messageMatch = tm => tm.Category == eventLogName && tm.Message.Equals(message);
//    //  }

//    //  var results = from tm in traceMessages
//    //                where messageMatch(tm)
//    //                select tm;

//    //  return (cardinality == Cardinality.None && results.Count() == 0) ||
//    //         (cardinality == Cardinality.ExactlyOne && results.Count() == 1) ||
//    //         (cardinality == Cardinality.MoreThanOne && results.Count() > 0);
//    //}

//    private void DumpAllTrace()
//    {
//      if (traceMessages.Count() == 0)
//      {
//        DebugWrite("No Trace!");
//        return;
//      }

//      DebugWrite("Trace:");
//      foreach (var onetrace in traceMessages)
//      {
//        DebugWrite(onetrace);
//      }
//      DebugWrite("End Trace.");
//    }

//    private static void DebugWrite(string message)
//    {
//      Debug.WriteLine(message);
//      Console.WriteLine(message);
//    }

//    public void Assert(bool condition)
//    {
//      throw new NotImplementedException();
//    }

//    public void Assert(bool condition, string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void Assert(bool condition, string message, string detailMessage)
//    {
//      throw new NotImplementedException();
//    }

//    public void Close()
//    {
//      throw new NotImplementedException();
//    }

//    public void Fail(string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void Fail(string message, string detailMessage)
//    {
//      throw new NotImplementedException();
//    }

//    public void Flush()
//    {
//      throw new NotImplementedException();
//    }

//    public void Indent()
//    {
//      throw new NotImplementedException();
//    }

//    public void Refresh()
//    {
//      throw new NotImplementedException();
//    }

//    public void TraceError(string message)
//    {
//      traceMessages.Add(new TraceMessage { Message = message, Method = "TraceError", Category = EventLogName.Error });
//    }

//    public void TraceError(string format, params object[] args)
//    {
//      traceMessages.Add(new TraceMessage
//                          {
//                            Format = format,
//                            Args = args,
//                            Message = string.Format(format, args),
//                            Method = "TraceError",
//                            Category = EventLogName.Error
//                          });
//    }

//    public void TraceInformation(string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void TraceInformation(string format, params object[] args)
//    {
//      traceMessages.Add(new TraceMessage
//                          {
//                            Format = format,
//                            Args = args,
//                            Message = string.Format(format, args),
//                            Method = "TraceInformation",
//                            Category = EventLogName.Information
//                          });
//    }

//    public void TraceWarning(string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void TraceWarning(string format, params object[] args)
//    {
//      traceMessages.Add(new TraceMessage
//                          {
//                            Format = format,
//                            Args = args,
//                            Message = string.Format(format, args),
//                            Method = "TraceWarning",
//                            Category = EventLogName.Warning
//                          });
//    }

//    public void Write(string message, string category)
//    {
//      traceMessages.Add(new TraceMessage
//      {
//        Format = null,
//        Args = null,
//        Message = message,
//        Method = "Write",
//        Category = category
//      });
//    }

//    public void Unindent()
//    {
//      throw new NotImplementedException();
//    }

//    public void Write(object value)
//    {
//      throw new NotImplementedException();
//    }

//    public void Write(string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void Write(object value, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteIf(bool condition, object value)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteIf(bool condition, string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteIf(bool condition, object value, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteIf(bool condition, string message, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLine(object value)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLine(string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLine(object value, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLine(string message, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLineIf(bool condition, object value)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLineIf(bool condition, string message)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLineIf(bool condition, object value, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public void WriteLineIf(bool condition, string message, string category)
//    {
//      throw new NotImplementedException();
//    }

//    public bool AutoFlush
//    {
//      set { throw new NotImplementedException(); }
//    }

//    public CorrelationManager CorrelationManager
//    {
//      get { throw new NotImplementedException(); }
//    }

//    public int IndentLevel
//    {
//      get { throw new NotImplementedException(); }
//      set { throw new NotImplementedException(); }
//    }

//    public int IndentSize
//    {
//      get { throw new NotImplementedException(); }
//      set { throw new NotImplementedException(); }
//    }

//    public TraceListenerCollection Listeners
//    {
//      get { throw new NotImplementedException(); }
//    }

//    public bool UseGlobalLock
//    {
//      get { throw new NotImplementedException(); }
//      set { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Gets the switch name of the current trace target
//    /// </summary>
//    public string Switch
//    {
//      get { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Is tracing disabled for this <see cref="ITraceSwitchable.Switch"/>?
//    /// </summary>
//    /// <returns>True if tracing is disabled.</returns>
//    public bool Disabled
//    {
//      get { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Is tracing at the Verbose level enabled for this <see cref="ITraceSwitchable.Switch"/>?
//    /// </summary>
//    /// <returns>True if tracing is enabled.</returns>
//    public bool VerboseEnabled
//    {
//      get { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Is tracing at the Info level enabled for this <see cref="ITraceSwitchable.Switch"/>?
//    /// </summary>
//    /// <returns>True if tracing is enabled.</returns>
//    public bool InformationEnabled
//    {
//      get { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Is tracing at the Warning level enabled for this <see cref="ITraceSwitchable.Switch"/>?
//    /// </summary>
//    /// <returns>True if tracing is enabled.</returns>
//    public bool WarningEnabled
//    {
//      get { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Is tracing at the Error level enabled for this <see cref="ITraceSwitchable.Switch"/>?
//    /// </summary>
//    /// <returns>True if tracing is enabled.</returns>
//    public bool ErrorEnabled
//    {
//      get { throw new NotImplementedException(); }
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose(Func<string> message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose(string message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg>(string message, TArg arg)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg>(string message, TArg arg, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Verbose. Only trace if <see cref="ITraceControls.VerboseEnabled"/>.
//    /// </summary>
//    public void Verbose<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information(Func<string> message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information(string message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg>(string message, TArg arg)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg>(string message, TArg arg, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Information. Only trace if <see cref="ITraceControls.InformationEnabled"/>.
//    /// </summary>
//    public void Information<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning(Func<string> message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg>(string message, TArg arg)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning(string message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg>(string message, TArg arg, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Warning. Only trace if <see cref="ITraceControls.WarningEnabled"/>.
//    /// </summary>
//    public void Warning<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error(Func<string> message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error(string message)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg>(string message, TArg arg)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg>(string message, TArg arg, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2>(string message, TArg1 arg1, TArg2 arg2, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3, TArg4>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3, TArg4, TArg5>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6)
//    {
//      throw new NotImplementedException();
//    }

//    /// <summary>
//    /// Trace a message as Error. Only trace if <see cref="ITraceControls.ErrorEnabled"/>.
//    /// </summary>
//    public void Error<TArg1, TArg2, TArg3, TArg4, TArg5, TArg6>(string message, TArg1 arg1, TArg2 arg2, TArg3 arg3, TArg4 arg4, TArg5 arg5, TArg6 arg6, IFormatProvider provider)
//    {
//      throw new NotImplementedException();
//    }
//  }
//}